class Solution {
public:
    int minCost(string colors, vector<int>& neededTime) {
        
        stack<pair<char,int>> st;
        int nRet=0;
        for(int i=0;i<colors.size();++i){
            if(st.empty()){
                st.push({colors[i],neededTime[i]});
            }
            else{
                while(st.size() && st.top().first==colors[i] && neededTime[i]>st.top().second){
                    nRet+=st.top().second;
                    st.pop();
                }
                if(st.size() && st.top().first==colors[i]){
                    nRet+=neededTime[i];
                }
                else{
                    st.push({colors[i],neededTime[i]});
                }
            }
        }

        return nRet;
    }
};
